﻿using Sisco.AplicacionEscritorio.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Sisco.AplicacionEscritorio.Equipo
{
    public partial class LiberarEquipo : Form
    {
        private AccesoDatos.USUARIO usuarioSistema;
        
        public LiberarEquipo()
        {
            InitializeComponent();
        }

        public LiberarEquipo(AccesoDatos.USUARIO usuariosistema)
            : this()
        {
            usuarioSistema = usuariosistema;
        }

        private void btnBuscarUsuario_Click(object sender, EventArgs e)
        {
            FormularioBuscar cuadroBuscar = new FormularioBuscar("Usuario");
            cuadroBuscar.ShowDialog(this);

            AccesoDatos.USUARIO selectedUsuario = cuadroBuscar.ObjetoBuscado as AccesoDatos.USUARIO;

            if (selectedUsuario != null)
            {
                txtUsuario.Text = selectedUsuario.NOMBRECOMPLETO;
                txtUsuario.Tag = selectedUsuario.ID;

                LogicaNegocio.EquipoBLL equipoBLL = new LogicaNegocio.EquipoBLL();

                List<AccesoDatos.EQUIPO> equiposAsignados = equipoBLL.ListarEquipo(selectedUsuario);

                gridEquiposAsignados.DataSource = equiposAsignados;
                gridEquiposAsignados.ClearSelection();
            }
        }

        private void gridEquiposAsignados_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridEquiposAsignados.DataSource != null)
            {
                gridEquiposAsignados.Columns["ID"].Visible = false;
                gridEquiposAsignados.Columns["IDUSUARIO"].Visible = false;
                gridEquiposAsignados.Columns["IDEQUIPO"].Visible = false;
                gridEquiposAsignados.Columns["IDTIPOEQUIPO"].Visible = false;
                gridEquiposAsignados.Columns["IDESTADO"].Visible = false;
                gridEquiposAsignados.Columns["TIPOEQUIPO"].Visible = false;
                gridEquiposAsignados.Columns["MARCA"].HeaderText = "Marca";
                gridEquiposAsignados.Columns["MODELO"].HeaderText = "Modelo";
                gridEquiposAsignados.Columns["SERIE"].HeaderText = "Serie";
                gridEquiposAsignados.Columns["ELIMINADO"].Visible = false;
                gridEquiposAsignados.Columns["IDUSUARIOANTIGUO"].Visible = false;
                gridEquiposAsignados.Columns["ASIGNADO"].Visible = false;
                gridEquiposAsignados.Columns["FECHAREGISTRO"].Visible = false;
                gridEquiposAsignados.Columns["REGISTRADOPOR"].Visible = false;
                gridEquiposAsignados.Columns["FECHAMODIFICACION"].Visible = false;
                gridEquiposAsignados.Columns["MODIFICADOPOR"].Visible = false;
                gridEquiposAsignados.Columns["NOMBEQUIPO"].Visible = false;
                gridEquiposAsignados.Columns["EQUIPO_ESTADO"].Visible = false;
                gridEquiposAsignados.Columns["TIPOEQUIPO1"].HeaderText = "Tipo de equipo";
                gridEquiposAsignados.Columns["RELACION_EQUI_PROG"].Visible = false;
                gridEquiposAsignados.Columns["USUARIO"].Visible = false;
                gridEquiposAsignados.Columns["MOVIMIENTO"].Visible = false;
            }
        }

        private void gridEquiposAsignados_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (gridEquiposAsignados.Columns[e.ColumnIndex].Name == "TIPOEQUIPO1")
            {
                AccesoDatos.TIPOEQUIPO tipoequipo = e.Value as AccesoDatos.TIPOEQUIPO;

                if (tipoequipo != null)
                {
                    e.Value = tipoequipo.NOMBRETIPO.Trim();
                }
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnLiberar_Click(object sender, EventArgs e)
        {
            if (gridEquiposAsignados.SelectedRows.Count > 0)
            {
                bool liberado = false;
                
                if (txtUsuario.Tag != null)
                {
                    DialogResult dr = MessageBox.Show("¿Confirma la liberación de los equipos?", "Sisco", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

                    if (dr == DialogResult.Yes)
                    {
                        //Se liberan los equipos seleccionados
                        AccesoDatos.EQUIPO selectedEquipo;
                        LogicaNegocio.EquipoBLL equipoBLL;

                        foreach (DataGridViewRow row in gridEquiposAsignados.SelectedRows)
                        {
                            selectedEquipo = row.DataBoundItem as AccesoDatos.EQUIPO;

                            if (selectedEquipo != null)
                            {
                                equipoBLL = new LogicaNegocio.EquipoBLL();
                                int result = equipoBLL.LiberarEquipo(selectedEquipo, usuarioSistema);

                                if (result > 0)
                                {
                                    liberado = true;
                                }
                                else
                                {
                                    MessageBox.Show("Error al Liberar los equipos", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);                                    
                                    break;
                                }
                            }
                        }

                        if (liberado)
                        {
                            MessageBox.Show("Equipos liberados", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);

                            if (txtUsuario.Tag != null)
                            {
                                LogicaNegocio.UsuarioBLL usuarioBLL = new LogicaNegocio.UsuarioBLL();
                                equipoBLL = new LogicaNegocio.EquipoBLL();

                                AccesoDatos.USUARIO usuario = usuarioBLL.GetUsuario(int.Parse(txtUsuario.Tag.ToString()));
                                List<AccesoDatos.EQUIPO> equiposAsignados = equipoBLL.ListarEquipo(usuario);

                                gridEquiposAsignados.DataSource = equiposAsignados;
                                gridEquiposAsignados.ClearSelection();
                            } 
                        }
                    }
                } 
            }
        }
    }
}
